package org.laperra.tienda.model;

import java.io.Serializable;
import java.text.DecimalFormat;

import javax.persistence.AssociationOverrides;
import javax.persistence.AssociationOverride;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Transient;

@Entity
@AssociationOverrides({
		@AssociationOverride(name = "pk.factura", joinColumns = @JoinColumn(name = "idFactura")),
		@AssociationOverride(name = "pk.producto", joinColumns = @JoinColumn(name = "idProducto")) })
public class LineaFactura implements Serializable {

	private static final long serialVersionUID = 1L;
	private LineaFacturaClave pk = new LineaFacturaClave();
	private Integer unidades=1;
	private Float porcentIva=21f;
	private Float precioBase;
	

	public LineaFactura() {
	}

	@EmbeddedId
	public LineaFacturaClave getPk() {
		return pk;
	}

	public void setPk(LineaFacturaClave pk) {
		this.pk = pk;
	}

	@Transient
	public Factura getFactura() {
		return getPk().getFactura();
	}

	public void setFactura(Factura factura) {
		getPk().setFactura(factura);
	}

	@Transient
	public Producto getProducto() {
		return getPk().getProducto();
	}

	public void setProducto(Producto producto) {
		getPk().setProducto(producto);
	}

	@Column(nullable = false)
	public Integer getUnidades() {
		return this.unidades;
	}

	public void setUnidades(Integer unidades) {
		this.unidades = unidades;
	}

	public void setPrecioBase(Float precioBase) {
		this.precioBase = precioBase;
	}

	public Float getPrecioBase() {
		return precioBase;
	}

	public void setPorcentIva(Float porcentIva) {
		this.porcentIva = porcentIva;
	}

	public Float getPorcentIva() {
		return porcentIva;
	}

	@Transient
	public String getTotalLinea() {
		DecimalFormat df = new DecimalFormat("#,##0.00");
		return df.format(this.getTotal());
	}
	@Transient
	public Float getTotal() {
		return new Float(unidades.intValue() * precioBase.floatValue()
				* (1 + porcentIva.floatValue() / 100));
	}


	public boolean equals(Object o) {
		if (this == o)
			return true;
		if (o == null || getClass() != o.getClass())
			return false;

		LineaFactura that = (LineaFactura) o;

		if (getPk() != null ? !getPk().equals(that.getPk())
				: that.getPk() != null)
			return false;

		return true;
	}

	public int hashCode() {
		return (getPk() != null ? getPk().hashCode() : 0);
	}

}
